package cliente.conta;

import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.text.SimpleDateFormat;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

import cliente.userCtl.Usuario;

import mensagens.EnviaDados;
import mensagens.ManterConta;

public class EstornarItemConta extends AbstractAction {

	/**
	 * 
	 */
	private static final long serialVersionUID = -965954512001233935L;

	private Action executaVisualizarConta;
	
	private JFrame tfEstornarItemConta;
	
	private Usuario userLogado;
	
	public EstornarItemConta(Usuario userLogado) {
		super("Estornar Item da Conta");
		this.putValue(Action.SHORT_DESCRIPTION, "Estorna um item da conta de um Hóspede");
		executaVisualizarConta = new ExecutaEstornarItemConta(this);
		setUserLogado(userLogado);
	}
	
	public void actionPerformed(ActionEvent e) {
		int tipoU = getUserLogado().getType();
		// Verifica se o usuario logado tem permissao para isto
		if( tipoU != 1){
			JOptionPane.showMessageDialog(getTfEstornarItemConta(), "Seu usuário não tem permissão para estornar um item!", "erro!", JOptionPane.ERROR_MESSAGE);
		} else {
			String s = (String) JOptionPane.showInputDialog(getTfEstornarItemConta(),"Digite o número do apartamento.", "Info!",JOptionPane.PLAIN_MESSAGE);
			
			//If a string was returned, say so.
			if ((s != null) && (s.length() > 0)) {
				int i_;
			    try{
			    	i_ = new Integer(s);
			    } catch (NumberFormatException fe){
			    	JOptionPane.showMessageDialog(getTfEstornarItemConta(), "Valor inválido!", "erro!", JOptionPane.ERROR_MESSAGE);
			    	getTfEstornarItemConta().dispose();
			    	return;
			    }
			    // Cria um novo manter conta do tipo buscar conta
			    ManterConta mc = new ManterConta(1);
			    // Seta o número do apartamento da conta
			    mc.setNumAp(i_);
			    // Envia a mensagem e espera a resposta com a conta
			    mc = (ManterConta) EnviaDados.enviarMensagem(mc);
			    
			    // Lê a quantidade de itens da conta
			    int tamanho = mc.getC().getItens().size();
			    
			    // Cria um novo frame
			    setTfEstornarItemConta(new JFrame("Estornar Item da Conta"));
			    // Seta a operação default ao fechar o frame (no caso, é eliminar o frame da memória)
			    getTfEstornarItemConta().setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
			    // Seta o container interno
				Container interno = this.getTfEstornarItemConta().getContentPane();
				// Ajusta o layout do Frame para um GridBagLayout
				GridBagConstraints cons = new GridBagConstraints();
				GridBagLayout layout = new GridBagLayout();
				interno.setLayout(layout);
				// Seta uma borda de 2px entre cada elemento do frame
				cons.insets = new Insets(2,2,2,2);
			    
				SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
				int d;
			    for(d = 0; d < tamanho; d++){
			    	JTextField t_1 = new JTextField(mc.getC().getItens().get(d).getServico().getDescricao());
			    	t_1.setEditable(false);
			    	cons.weightx	= 0.40;
			    	cons.fill		= GridBagConstraints.HORIZONTAL;
			    	cons.gridx		= 0;
			    	cons.gridy		= d;
			    	interno.add(t_1, cons);
			    	
			    	JTextField t_2 = new JTextField(sdf.format(mc.getC().getItens().get(d).getData()));
			    	t_2.setEditable(false);
			    	cons.weightx	= 0.20;
			    	//cons.fill		= GridBagConstraints.HORIZONTAL;
			    	cons.gridx		= 1;
			    	cons.gridy		= d;
			    	interno.add(t_2, cons);
			    	
			    	JTextField t_3 = new JTextField(Integer.toString(mc.getC().getItens().get(d).getQuantidade()));
			    	t_3.setEditable(false);
			    	cons.weightx	= 0.20;
			    	//cons.fill		= GridBagConstraints.HORIZONTAL;
			    	cons.gridx		= 2;
			    	cons.gridy		= d;
			    	interno.add(t_3, cons);
			    	
			    	JTextField t_4 = new JTextField(Double.toString(mc.getC().getItens().get(d).getValor()));
			    	t_4.setEditable(false);
			    	cons.weightx	= 0.20;
			    	//cons.fill		= GridBagConstraints.NONE;
			    	cons.gridx		= 3;
			    	cons.gridy		= d;
			    	interno.add(t_4, cons);
			    	
			    }
			    JButton bfecha 	= new JButton("Fechar");
			    cons.weightx	= 0.20;
			    cons.fill		= GridBagConstraints.NONE;
			    cons.gridx		= 3;
			    cons.gridy		= d+1;
			    bfecha.setActionCommand("fecha");
			    bfecha.addActionListener(getExecutaVisualizarConta());
			    interno.add(bfecha, cons);
			    
			    getTfEstornarItemConta().setVisible(true);
			    getTfEstornarItemConta().setSize(400,500);
			    
			    return;
			}
		

			//If you're here, the return value was null/empty.
			JOptionPane.showMessageDialog(getTfEstornarItemConta(), "Nenhum valor informado!", "erro!", JOptionPane.ERROR_MESSAGE);
			getTfEstornarItemConta().dispose();
		}

	}

	public void setExecutaVisualizarConta(Action executaVisualizarConta) {
		this.executaVisualizarConta = executaVisualizarConta;
	}

	public Action getExecutaVisualizarConta() {
		return executaVisualizarConta;
	}

	public void setTfEstornarItemConta(JFrame tfEstornarItemConta) {
		this.tfEstornarItemConta = tfEstornarItemConta;
	}

	public JFrame getTfEstornarItemConta() {
		return tfEstornarItemConta;
	}

	public void setUserLogado(Usuario userLogado) {
		this.userLogado = userLogado;
	}

	public Usuario getUserLogado() {
		return userLogado;
	}


}
